package top.lishuoboy.hutool.lang;

import cn.hutool.core.lang.ansi.AnsiBackground;
import cn.hutool.core.lang.ansi.AnsiColor;
import cn.hutool.core.lang.ansi.AnsiEncoder;
import cn.hutool.core.lang.ansi.AnsiStyle;
import org.junit.Test;

/**
 * 彩色打印输出
 * <p>
 * 【ANSI颜色样式与数值对照表，java、shell彩色打印输出】：https://blog.csdn.net/lishuoboy/article/details/130676206
 */
public class AnsiEncoderTest {
    // 0b、0、、0x
    // \033即八进制的33，为十进制的27，对应ASCⅡ的ESC。https://baike.baidu.com/item/ASCII/309296
    private static final String START = "\033[";
    private static final String END = "m";

    @Test
    public void test() {
        System.out.println("==========test()==========");
        // 使用1个样式、颜色
        System.out.println(START + 31 + END + "我是红色前景");
        System.out.println("你猜我啥颜色？");
        System.out.println(START + 91 + END + "我是亮红色前景" + START + 0 + END);
        System.out.println("你猜我啥颜色？");
        System.out.println(START + 41 + END + "我是红色背景" + START + 0 + END);
        System.out.println(START + 3 + END + "我是斜体" + START + 0 + END);

        // 同时使用多个样式、颜色
        System.out.println(START + "34;103" + END + "我是蓝色前景、亮黄色背景" + START + 0 + END);
        System.out.println(START + 34 + END + START + 103 + END + "我是蓝色前景、亮黄色背景" + START + 0 + END);
    }

    @Test
    public void testHuTool() {
        System.out.println("==========testHuTool()==========");
        // 使用1个样式、颜色
        System.out.println(AnsiEncoder.encode(AnsiColor.RED, "我是红色前景"));
        System.out.println("你猜我啥颜色？");
        System.out.println(AnsiEncoder.encode(AnsiColor.BRIGHT_RED, "我是亮红色前景"));
        System.out.println("你猜我啥颜色？");
        System.out.println(AnsiEncoder.encode(AnsiBackground.RED, "我是红色背景"));
        System.out.println(AnsiEncoder.encode(AnsiStyle.ITALIC, "我是斜体"));

        // 同时使用多个样式、颜色
        System.out.println(AnsiEncoder.encode(AnsiColor.BLUE, AnsiBackground.BRIGHT_YELLOW, "我是蓝色前景、亮黄色背景"));
    }
}
